package com.magist.core.util;

import org.apache.commons.lang3.StringUtils;

import java.util.Date;
import java.util.Random;
import java.util.UUID;

public class CodeUtils {

	private static final String	CODE_LIST	= "ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789";

	public static String getId(Long no) {
		StringBuffer sb = new StringBuffer();
		Random r = new Random();
		String target = StringUtils.leftPad(String.valueOf(no % 100000000), 8, "0");
		sb = sb.append(DateUtil.format(new Date(), DateUtil.yyyyMMdd)).append("00").append(target).append(StringUtils.leftPad(String.valueOf(r.nextInt(10000)), 4, "0"));
		return sb.toString();
	}

	public static String getOrderNo(String prdType, Long no) {
		StringBuffer sb = new StringBuffer();
		Random r = new Random();
		String target = StringUtils.leftPad(String.valueOf(no % 100000000), 8, "0");
		sb = sb.append(DateUtil.format(new Date(), DateUtil.yyMMdd)).append("00").append(prdType).append(target).append(StringUtils.leftPad(String.valueOf(r.nextInt(10000)), 4, "0"));
		return sb.toString();
	}

	public static String getNormalNo(String prefix) {
		StringBuffer sb = new StringBuffer();
		Random r = new Random();
		sb.append(prefix);
		sb = sb.append(DateUtil.format(new Date(), DateUtil.yyyyMMdd)).append(StringUtils.leftPad(String.valueOf(r.nextInt(1000000)), 6, "0"));
		return sb.toString();
	}
	
	public static String getOrderNoAndDate(String prdType, Long no,Date date) {
		StringBuffer sb = new StringBuffer();
		Random r = new Random();
		String target = StringUtils.leftPad(String.valueOf(no % 100000000), 8, "0");
		sb = sb.append(DateUtil.format(date, DateUtil.yyMMdd)).append(prdType).append(target).append(StringUtils.leftPad(String.valueOf(r.nextInt(10000)), 4, "0"));
		return sb.toString();
	}

	public static String getyyMMddSerno(Long no) {
		StringBuffer sb = new StringBuffer();
		Random r = new Random();
		String target = StringUtils.leftPad(String.valueOf(no % 100000000), 8, "0");
		sb = sb.append(DateUtil.format(new Date(), DateUtil.yyMMdd)).append("00").append(target).append(StringUtils.leftPad(String.valueOf(r.nextInt(10000)), 4, "0"));
		return sb.toString();
	}

	public static Long sortNum(String idno) {
		return Long.parseLong(idno.substring(idno.length() - 12, idno.length() - 4));
	}

	public static String getUUID() {
		return UUID.randomUUID().toString().replaceAll("-", "");
	}

//	public static String getAuthCode(Long no){
//		StringBuffer sb = new StringBuffer();
//		Random r = new Random();
//		String target = StringUtils.leftPad(String.valueOf(no % 100000000), 4, "0");
////		sb = sb.append(DateUtil.format(new Date(), DateUtil.yyMMdd)).append("00").append(prdType).append(target).append(StringUtils.leftPad(String.valueOf(r.nextInt(10000)), 4, "0"));
//		return target;
//	}

	/**
	 * 把号码转成字符串 0-9A-Za-z 如10 A 11 B 36 a
	 */
	public static String idToCode(String id, Integer subLen) {
		if (subLen < 8) {
			subLen = 8;
		}
		String subStr = id.substring(id.length() - subLen);
		return idToCode(Long.valueOf(subStr));
	}

	/**
	 * 把号码转成字符串 0-9A-Za-z 如10 A 11 B 36 a
	 */
	public static String idToCode(Long no) {
		if (no < 10) {
			return String.valueOf(no);
		} else if (no < 36) {
			return String.valueOf((char) (no - 10 + 'A'));
		} else if (no < 62) {
			return String.valueOf((char) (no - 36 + 'a'));
		} else {
			return idToCode(no / 62) + idToCode(no % 62);
		}
	}

	//
	// /**
	// * 生成编码码
	// *
	// * @param head
	// * @param length 长度
	// * @param no
	// * @return
	// */
	// public static String genHeadCode(String head, int length, Long no) {
	// return head + DateFormatUtils.format(System.currentTimeMillis(), "yyyyMM") + RandomStringUtils.randomNumeric(2) + StringUtils.leftPad(no.toString(), length, "0");
	// }
	//
	// /**
	// * 应用KEY生成
	// *
	// * @return
	// */
	// public static String genAppKey() {
	// UUID uuid = UUID.randomUUID();
	// return uuid.toString().replaceAll("-", "");
	// }
	//
	// /**
	// * 根据序号生成应用编码。<br>
	// * 规则：yyyyMM(6) + Random(2) + serialNo(8)
	// *
	// * @param num
	// * @return
	// */
	// public static String genAppCode(Long num) {
	// return DateFormatUtils.format(System.currentTimeMillis(), "yyyyMM") + RandomStringUtils.randomNumeric(2) + StringUtils.leftPad(num.toString(), 8, "0");
	// }
	//
	// /**
	// * 根据序号生成应用编码。<br>
	// * 规则：yyyyMMdd(8) + Random(2) + serialNo(6)
	// *
	// * @param num
	// * @return
	// */
	// public static String genAccountCode(Long num) {
	// return DateFormatUtils.format(System.currentTimeMillis(), "yyyyMMdd") + RandomStringUtils.randomNumeric(2) + StringUtils.leftPad(num.toString(), 6, "0");
	// }
	//
	// /**
	// * 根据序号生成订单编码。<br>
	// * 规则：yyyyMMdd(10) + Random(2) + serialNo(6)
	// *
	// * @param num
	// * @return
	// */
	// public static String genOrderCode(String header,Long num) {
	// return header + DateFormatUtils.format(System.currentTimeMillis(), "yyyyMMddHH") + RandomStringUtils.randomNumeric(2) + StringUtils.leftPad(num.toString(), 6, "0");
	// }
	//
	// /**
	// * 根据当前时间生成随机串
	// * @param header 起始字符串
	// * @param randLength 随机数长度
	// * @return
	// */
	// public static String genCodeByDate(String header, Integer randLength){
	// return header + DateFormatUtils.format(System.currentTimeMillis(), "yyMMdd") + RandomStringUtils.randomNumeric(randLength);
	// }
	//
	// private static final String FLOW = "f";
	//
	// /**
	// * 根据序号流水号<br>
	// * 规则：yyyyMMdd(10) + Random(2) + serialNo(6)
	// *
	// * @param num
	// * @return
	// */
	// public static String genAccountFlowCode(Long accountId, Long num) {
	// return FLOW + StringUtils.rightPad(String.valueOf(accountId), 2, "0") + DateFormatUtils.format(System.currentTimeMillis(), "yyyyMMdd") + RandomStringUtils.randomNumeric(2)
	// + StringUtils.leftPad(num.toString(), 5, "0");
	// }
	//
	// /**
	// * 根据序号流水号<br>
	// * 规则：yyyyMMdd(8) + Random(5) + serialNo(5)
	// *
	// * @param num
	// * @return
	// */
	// public static String genFlowCode(Long num) {
	// return DateFormatUtils.format(System.currentTimeMillis(), "yyyyMMdd") + RandomStringUtils.randomNumeric(5)
	// + StringUtils.leftPad(num.toString(), 5, "0");
	// }
	//
	//
	//
	// public static String genUserCode(){
	// Random random = new Random();
	// String code = "";
	// for (int i = 0; i < 4; i++) {
	// int rand = random.nextInt(CODE_LIST.length());
	// String strRand = CODE_LIST.substring(rand, rand + 1);
	// code += strRand;
	// }
	//
	// return code;
	//
	//
	// }
	//
	// /**
	// * @return
	// */
	// public static String genVerificationCode() {
	// Random rnd = new Random();
	// String code = "";
	// for (int i = 0; i < 8; i++) {
	// int rand = rnd.nextInt(9);
	// code += rand;
	// }
	// return code;
	// }
}
